package com.baizhi.bzmall.admin.service.impl;

import com.baizhi.bzmall.admin.service.MenuService;
import com.baizhi.bzmall.dao.MenuDao;
import com.baizhi.bzmall.entity.Menu;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class MenuServiceImpl implements MenuService {
    @Autowired
    private MenuDao md;
    @Override
    @Transactional(readOnly = true)
    public List<Menu> selectAllMenu() {
        return md.selectAllMenu();
    }

    @Override
    public List<Menu> selectAll() {
        return md.selectList(null);
    }
    /**
     * 根据菜单的id查找出该菜单下面的子菜单。
     * @param parentId 要查找的父菜单的编号
     * @param menus 所有的
     */
    private List<Menu> getChildrenMenu(int parentId, List<Menu> menus){
        return menus.stream().filter(menu->menu.getPid()==parentId)//过滤出想要查询的子菜单。
                //给当前的菜单的children属性赋值
                .peek(menu->menu.setChildren(getChildrenMenu(menu.getId(),menus)))//递归调用，当过滤后没有子菜单了程序就结束了。
                .collect(Collectors.toList());
    }
    public List<Menu> selectAllPermission(){
        List<Menu> menus = this.selectAll();//简单地从数据库把数据全部查询出来，查出所有菜单，包括1级，2级和三级
        List<Menu> collect = menus.stream()
                .filter((menu) -> menu.getType() == 0)//过滤出一级分类信息
                .peek((menu)->menu.setChildren(getChildrenMenu(menu.getId(),menus)))//同时给一级分类的children属性赋值。
                .collect(Collectors.toList());
        return collect;
    }

    @Override
    public List<Menu> selectPermissionByUsername(String username) {
        return md.selectPermissionByUsername(username);
    }
}
